perm filename XGP.FAI[SAB,LCS] blob
sn#347650 filedate 1978-04-08 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE XGP
C00010 ENDMK
C⊗;
TITLE XGP
INTERNAL XGP
INTERNAL GETFI2,FASTI2
INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
EXTERNAL EXIT
OUTF: 0
LX: 0
N: BLOCK =512
XGP: 0 ;SUBROUTINE PLOT(I,J,K)
SETO 4, ;COMMON /OUTF/JJ
CAMN 4,OUTF ;DIMENSION N(148)
JRST PL4 ;IF(JJ.EQ.-1)GO TO 4
MOVNM 4,LX ;L=1
MOVEI 4,=127 ;N(1)=127
MOVEM 4,N
MOVE 4,[ASCIZ/" "/] ;IF(JJ.EQ.' ')JJ='PLT'
CAME 4,OUTF
JRST PLB ;WRITES FILE WITH .PLT EXTENSION.
MOVE 4,[ASCIZ/"PLT"/]
MOVEM 4,OUTF
PLB: JSA 16,PUTEXT ;CALL PUTEXT(JJ,'PLT')
JUMP [ASCIZ/PLT /]
JUMP [ASCIZ/PLT/]
SETOM OUTF ;JJ=-1
PL4: MOVE 5,@2(16) ;4 IF(K.EQ.99)GO TO 1
CAIN 5,=999
JRST PL1
AOS 7,LX ;L=L+1
CAIL 7,=129
JRST [ CAIL 7,=257
JRST TOP
CAIE 7,=129
JRST NOWD
WWD: MOVEI 4,=127
MOVEM 4,N-1(7) ;N(L)=127
AOS LX
JRST NOWD
TOP: CAIL 7,=385
JRST TOP2
CAIE 7,=257
JRST NOWD
JRST WWD
TOP2: CAIN 7,=385
JRST WWD
JRST NOWD]
NOWD: MOVEI 7,N
ADD 7,LX ;CALL PAC(N(L),I)[SEE MSFAI.FAI]
HRRZ 4,2(16)
HRR 5,@4
LSHC 5,-10
HRRZ 4,1(16)
HRR 5,@4
LSHC 5,-16
HRRZ 4,(16)
HRR 5,@4
LSHC 5,-16
MOVEM 6,-1(7)
MOVEM 6,LASTPK# ;SAVE LAST PACKED FOR END OF DATA
MOVE 7,LX
CAIGE 7,=512 ;3 IF(L.LT.512)RETURN
JRA 16,3(16)
JSA 16,EXTOUT ;2 CALL EXTOUT(N,512)
JUMP N
JUMP [=512]
MOVEI 7,1 ;L=1
MOVEM 7,LX
JRA 16,3(16) ;RETURN
PL1: MOVE 4,LX
CAIN 4,[=512] ;IF EXACTLY 512, JUMP TO FASTOUT
JRST PLEND
IDIVI 4,=128 ;JJJ=L/128
IMULI 4,=128 ;JJJJ=JJJ*128
MOVE 7,4 ;AC5 HAS REMAINDER
MOVEM 5,N(7) ;FOUND LAST WDCNT.
ADDI 4,=128 ; END OF NEXT LOOP
MOVE 6,LX
SKIPN 5
AOJ 6, ;IF ON WDCNT NUM.(AC5=0), ADD 1
MOVE 7,LASTPK
;;COULD GET BAD DATA IF EXACT 128 WDS. MOVE 7,N-1(5) ;J=N(L)
AOJ 6, ; (L=L+1)
PL100: MOVEM 7,N-1(6) ;DO 100 JJ=L,JXXX (AC4)
;100 N(JJ)=J
CAMGE 6,4
AOJA 6,PL100
PLEND: JSA 16,EXTOUT ;CALL EXTOUT(N,512)
JUMP N
JUMP 4
JSA 16,FINEXT ;CALL FINEXT
SETZM OUTF ;JJ=0
JSA 16,EXIT ;CALL EXIT
; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
CH3←13
CH←12
CH2←11
BLKS←←=1
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
REGS: BLOCK 20
DIR: BLOCK 4
;CALL PUTEXT(<FILE>,<EXT>)
PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
JSA 16,INTFIL
SETZM DIR+2
SETZM DIR+3
ENTER CH2,DIR
ERROR <ENTER FAILED>
JRA 16,2(16)
;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
EXTOUT: 0
HRRZ 0,0(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
OUTPUT CH2,COM
STATZ CH2,740000
ERROR <WRITE ERROR>
JRA 16,2(16)
INTFIL: 0 ;INITS DSK
MOVEI REGS
BLT REGS+3
INIT CH2,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
INTF4: MOVE 0,FILNAM#
MOVEM 0,FN#
MOVE 1,[POINT 7,FN]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTF1: ILDB 0,1
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: HRLZI REGS
BLT 3
MOVE 0,EXTNAM#
MOVEM 0,EX#
MOVE 1,[POINT 7,EX]
EXTF3: MOVE 2,[POINT 6,DIR+1]
SETZM DIR+1
MOVEI 3,5
EXTF1: ILDB 0,1
CAIN 0," "
JRST EXTF2
SUBI 0,40
IDPB 0,2
SOJG 3,EXTF1
EXTF2: HRLZI REGS
BLT 3
JRA 16,0(16)
COM: OCT 0,0
BLKNUM: 0
;CALL FINEXT
FINEXT: 0
CLOSE CH2,0
STATZ CH2,740000
ERROR <ERROR AFTER CLOSE>
RELEASE CH2,0
JRA 16,0(16)
;CALL GETEXT(<FILE>,<EXT>)
GETEXT: 0
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
JSA 16,INTFX
SETZM DIR+3
SETZM DIR+2
LOOKUP CH,DIR
ERROR <LOOKUP FAILED>
JRA 16,2(16)
INTFX: 0 ;INITS DSK FOR INPUT
MOVEI REGS
BLT REGS+3
INIT CH,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
JRST INTF4
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
EXTIN: 0
HRRZ 0,0(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH,COM
STATZ CH,740000
0
JRA 16,2(16)
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTINUE
JRA 16,1(16)
;CALL GETFI2(<FILE>,<0 OR -1>) 0=DAT,LCS -1=WHERE YOU ARE.
GETFI2: 0
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,PPNW#
JSA 16,INTFIZ
MOVE 0,[SIXBIT/DMD/]
MOVEM 0,DIR+1
JSA 16,LKUP
SKIPA
JRST GETF3
SETZM DIR+1
JSA 16,LKUP
SKIPA
GETF3: JRA 16,2(16)
MOVEI 1
MOVEM @1(16) ;SEND BACK A 1 IN 2ND ARGUMENT IF FILE NOT FOUND.
JRA 16,2(16)
LKUP: 0
SETZM DIR+2
SETZM DIR+3
SKIPE PPNW ;0=DAT,LCS NON-ZERO = WHERE EVER YOU ARE
JRST LUP
MOVE 0,[SIXBIT/DATLCS/]
MOVEM 0,DIR+3
LUP: LOOKUP CH3,DIR
JRA 16,0(16)
JRA 16,1(16)
INTFIZ: 0 ;INITS DSK FOR INPUT
MOVEI REGS
BLT REGS+3
INIT CH3,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
JRST INTF4
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
FASTI2: 0
HRRZ 0,0(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
JRA 16,2(16)
END